package com.example.apartment.controller;

import com.example.apartment.common.ApiRestResponse;
import com.example.apartment.common.RespExceptionEnum;
import com.example.apartment.domain.Admin;
import com.example.apartment.service.AdminService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 管理员用户控制器
 *
 * @author wuzexin
 * @date 2021/10/27 15:56
 */
@RestController
@RequestMapping("/admin")
public class AdminController {

    @Resource
    private AdminService adminService;

    /**
     * 管理员注册功能
     *
     * @param username  用户名
     * @param password  密码
     * @param cellphone 手机号码
     * @return
     */
    @PostMapping("/register")
    public ApiRestResponse register(String username, String password, String cellphone) {
        // 判断用户名是否为空
        if (username.isEmpty()) {
            return ApiRestResponse.error(RespExceptionEnum.NEED_USER_NAME);
        }
        // 判断密码是否为空
        if (password.isEmpty()) {
            return ApiRestResponse.error(RespExceptionEnum.NEED_PASSWORD);
        }
        // 判断手机号码是否为空
        if (cellphone.isEmpty()) {
            return ApiRestResponse.error(RespExceptionEnum.NEED_CELLPHONE);
        }
        // 进行注册
        adminService.register(username, password, cellphone);
        // 注册成功
        return ApiRestResponse.success();
    }

    /**
     * 管理员登录功能
     *
     * @param username 用户名
     * @param password 密码
     * @return 用户信息
     */
    @PostMapping("/login")
    public ApiRestResponse login(String username, String password, HttpSession session) {
        // 判断用户名是否为空
        if (username.isEmpty()) {
            return ApiRestResponse.error(RespExceptionEnum.NEED_USER_NAME);
        }
        // 判断密码是否为空
        if (password.isEmpty()) {
            return ApiRestResponse.error(RespExceptionEnum.NEED_PASSWORD);
        }
        // 进行登录
        Admin admin = adminService.adminLogin(username, password);
        // 将用户信息存入session，未进行脱敏处理(懒)
        session.setAttribute("admin", admin);
        // 登录成功返回用户信息
        return ApiRestResponse.success(admin);
    }

    /*
        退出登录
     */
    @GetMapping("/logout")
    public ApiRestResponse logout(HttpSession session) {
        if (session.getAttribute("admin") != null) {
            session.removeAttribute("admin");
        }
        return ApiRestResponse.success();
    }

    /*
        查询所有管理员（系统管理员和宿舍管理员）
     */
    @PostMapping("/select")
    public ApiRestResponse select(HttpSession session) {

        // 从session获取到管理员用户信息
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin == null) {
            // 如果admin为空，则抛出未登录异常
            return ApiRestResponse.error(RespExceptionEnum.NEED_LOGIN);
        }

        // 查询
        List<Admin> list = adminService.select(admin);

        return ApiRestResponse.success(list);
    }

    /*
        根据id查询管理员信息
     */
    @PostMapping("/selectById")
    public ApiRestResponse selectById(Integer id, HttpSession session) {

        // 从session获取到管理员用户信息
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin == null) {
            // 如果admin为空，则抛出未登录异常
            return ApiRestResponse.error(RespExceptionEnum.NEED_LOGIN);
        }

        Admin admin1 = adminService.seletctById(admin, id);

        return ApiRestResponse.success(admin1);
    }

    /*
        修改管理员信息
     */
    @PostMapping("/update")
    public ApiRestResponse update(Integer id, String username, String cellphone, Integer role, String buildingName, String password, HttpSession session) {

        // 从session获取到管理员用户信息
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin == null) {
            // 如果admin为空，则抛出未登录异常
            return ApiRestResponse.error(RespExceptionEnum.NEED_LOGIN);
        }

        Admin update = adminService.update(admin, id, username, role, cellphone, password, buildingName);

        return ApiRestResponse.success(update);
    }

    /*
        查询所有无权限管理员
     */
    @PostMapping("/selectNoPermissions")
    public ApiRestResponse selectNoPermissions(HttpSession session) {

        // 从session获取到管理员用户信息
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin == null) {
            // 如果admin为空，则抛出未登录异常
            return ApiRestResponse.error(RespExceptionEnum.NEED_LOGIN);
        }

        // 查询
        List<Admin> list = adminService.selectNoPermissions(admin);

        return ApiRestResponse.success(list);
    }

    /*
        删除无权限管理员
     */
    @PostMapping("/delete")
    public ApiRestResponse delete(Integer id, HttpSession session) {

        // 从session获取到管理员用户信息
        Admin admin = (Admin) session.getAttribute("admin");
        if (admin == null) {
            // 如果admin为空，则抛出未登录异常
            return ApiRestResponse.error(RespExceptionEnum.NEED_LOGIN);
        }

        adminService.delete(admin, id);

        return ApiRestResponse.success();
    }
}
